package com.bt.lms.ui.page.sys.role.privilege;

import com.bt.lms.entity.page.Page;
import com.bt.lms.ui.page.sys.utils.NetWorkUtils;
import com.bt.lms.ui.vo.PageSkipInfo;
import com.bt.lms.main.BotLmsApp;
import com.bt.lms.ui.page.common.PageLocation;
import com.bt.lms.ui.page.sys.utils.MyButton;
import com.bt.lms.ui.page.sys.utils.MyHBox;
import com.bt.lms.ui.page.sys.utils.MyVBox;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Label;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;

import java.util.List;

/**
 * 权限基本界面
 *
 * @author 徐大永
 */
public class PagePrivilegeBasic extends VBox {

    /**
     * 界面跳转信息
     */
    private final PageSkipInfo pageSkipInfo;

    /**
     * 详情部分
     * 内部有且只有一个组件，及某模块的权限详情
     */
    private final MyVBox detailsVBox = new MyVBox();

    /**
     * 构建权限界面
     *
     * @param name         被查看权限的角色名字
     * @param rights       角色权限
     * @param pageSkipInfo 界面跳转信息
     */
    public PagePrivilegeBasic(String name, List<Integer> rights, PageSkipInfo pageSkipInfo) {

        //维护
        this.pageSkipInfo = pageSkipInfo;

        //布局
        this.setPrefWidth(BotLmsApp.PER_WIGHT);
        this.setPrefHeight(BotLmsApp.HEIGHT);
        Insets insets = new Insets(0, 10, 0, 10);
        this.setPadding(insets);
        this.setSpacing(20);

        //定位
        PageLocation pageLocation = new PageLocation("首页", "系统管理", "角色权限管理", "设置权限");
        this.getChildren().add(pageLocation);

        //总结说明
        VBox sumUpVBox = new VBox();
        sumUpVBoxInit(sumUpVBox, name);
        this.getChildren().add(sumUpVBox);

        //控制站
        MyHBox controlHBox = new MyHBox();
        controlHBoxInit(controlHBox);
        this.getChildren().add(controlHBox);

        //详情部分  默认显示招生权限界面
        EnpPrivilege enpPrivilege = new EnpPrivilege();
        detailsVBox.getChildren().add(enpPrivilege);
        this.getChildren().add(detailsVBox);

        //操作
        HBox operateHBox = new HBox();
        operateHBoxInit(operateHBox);
        this.getChildren().add(operateHBox);
    }

    /**
     * 操作
     *
     * @param operateHBox 操作容器
     */
    private void operateHBoxInit(HBox operateHBox) {

        //布局
        operateHBox.setAlignment(Pos.CENTER);
        operateHBox.setSpacing(15);

        MyButton confirmBtn = new MyButton("确认");
        operateHBox.getChildren().add(confirmBtn);
        confirmBtn.setOnAction(event -> NetWorkUtils.reqUserPagingPage(pageSkipInfo,new Page<>()));

        MyButton cancelBtn = new MyButton("返回");
        operateHBox.getChildren().add(cancelBtn);
        cancelBtn.setOnAction(event -> NetWorkUtils.reqUserPagingPage(pageSkipInfo,new Page<>()));

    }

    /**
     * 控制站初始化
     *
     * @param controlHBox 控制站
     */
    private void controlHBoxInit(MyHBox controlHBox) {

        //布局
        controlHBox.setSpacing(15);

        //各大部分
        //招生管理
        MyButton enpBtn = new MyButton("招生管理");
        enpBtn.setOnAction(event -> {
            EnpPrivilege enpPrivilege = new EnpPrivilege();
            detailsVBox.getChildren().set(0, enpPrivilege);
        });
        controlHBox.getChildren().add(enpBtn);

        //学籍管理
        MyButton fileBtn = new MyButton("学籍管理");
        fileBtn.setOnAction(event -> {
            FilePrivilege filePrivilege = new FilePrivilege();
            detailsVBox.getChildren().set(0, filePrivilege);
        });
        controlHBox.getChildren().add(fileBtn);

        //教学管理
        MyButton teachingBtn = new MyButton("教学管理");
        teachingBtn.setOnAction(event -> {
            TeachingPrivilege teachingPrivilege = new TeachingPrivilege();
            detailsVBox.getChildren().set(0, teachingPrivilege);
        });
        controlHBox.getChildren().add(teachingBtn);

        //系统管理
        MyButton sysBtn = new MyButton("系统管理");
        sysBtn.setOnAction(event -> {
            SysPrivilege sysPrivilege = new SysPrivilege();
            detailsVBox.getChildren().set(0, sysPrivilege);
        });
        controlHBox.getChildren().add(sysBtn);

    }

    /**
     * 总结容器初始化
     *
     * @param sumUpVBox 总结容器
     * @param name      角色名称
     */
    private void sumUpVBoxInit(VBox sumUpVBox, String name) {

        String test = "为" + name + "角色设置权限";
        Label label = new Label(test);
        HBox hBox = new HBox();
        hBox.setPadding(new Insets(0, 0, 0, 10));
        hBox.getChildren().add(label);
        sumUpVBox.getChildren().add(hBox);

    }

}

/**
 * 招生权限
 */
class EnpPrivilege extends VBox {

    /**
     * 构建招生权限界界面
     */
    public EnpPrivilege() {

        //布局
        Insets insets = new Insets(5, 10, 5, 10);
        this.setPadding(insets);
        this.setSpacing(10);

        //总控制
        MyHBox sumHBox = new MyHBox();
        sumHBoxInit(sumHBox);
        this.getChildren().add(sumHBox);

        //招生计划管理
        MyVBox enpHBox = new MyVBox();
        enpHBoxInit(enpHBox);
        this.getChildren().add(enpHBox);

        //报名学员管理
        MyVBox myVBox = new MyVBox();
        myVBoxInit(myVBox);
        this.getChildren().add(myVBox);

    }

    /**
     * 总控制
     *
     * @param sumHBox 总控容器
     */
    private void sumHBoxInit(HBox sumHBox) {
        CheckBox checkBox = new CheckBox("全部");
        sumHBox.getChildren().add(checkBox);
    }

    /**
     * 报名学员控制
     *
     * @param myVBox 容器
     */
    private void myVBoxInit(MyVBox myVBox) {

        //布局
        myVBox.setSpacing(10);

        MyHBox headHBox = new MyHBox();
        myVBox.getChildren().add(headHBox);
        //布局
        headHBox.setSpacing(10);
        Label enpLab = new Label("报名学员管理：");
        enpLab.setMinWidth(140);
        enpLab.setAlignment(Pos.CENTER_RIGHT);
        headHBox.getChildren().add(enpLab);
        CheckBox sum = new CheckBox("全部");
        headHBox.getChildren().add(sum);

        MyHBox footHBox = new MyHBox();
        myVBox.getChildren().add(footHBox);
        //布局
        footHBox.setSpacing(10);
        footHBox.setPadding(new Insets(0, 0, 0, 150));
        footHBox.getChildren().addAll(new CheckBox("查看报名学员")
                , new CheckBox("新增报名学员"), new CheckBox("编辑报名学员")
                , new CheckBox("删除报名学员"), new CheckBox("审核")
                , new CheckBox("录取"));

    }

    /**
     * 招生管理控制
     *
     * @param enpHBox 容器
     */
    private void enpHBoxInit(MyVBox enpHBox) {

        enpHBox.setSpacing(10);

        //布局
        enpHBox.setSpacing(10);

        MyHBox headHBox = new MyHBox();
        enpHBox.getChildren().add(headHBox);
        //布局
        headHBox.setSpacing(10);
        Label enpLab = new Label("招生计划管理：");
        enpLab.setMinWidth(140);
        enpLab.setAlignment(Pos.CENTER_RIGHT);
        headHBox.getChildren().add(enpLab);
        CheckBox sum = new CheckBox("全部");
        headHBox.getChildren().add(sum);

        MyHBox footHBox = new MyHBox();
        enpHBox.getChildren().add(footHBox);
        //布局
        footHBox.setSpacing(10);
        footHBox.setPadding(new Insets(0, 0, 0, 150));
        footHBox.getChildren().addAll(new CheckBox("查看招生计划")
                , new CheckBox("新增招生计划"), new CheckBox("编辑招生计划")
                , new CheckBox("删除招生计划"));

    }

}

/**
 * 学籍权限
 */
class FilePrivilege extends VBox {

    /**
     * 构建学籍权限界面
     */
    public FilePrivilege() {
        //布局
        Insets insets = new Insets(5, 10, 5, 10);
        this.setPadding(insets);
        this.setSpacing(10);

        //总控制
        MyHBox sumHBox = new MyHBox();
        sumHBoxInit(sumHBox);
        this.getChildren().add(sumHBox);

        //学籍信息管理
        MyVBox rollVBox = new MyVBox();
        rollVBoxInit(rollVBox);
        this.getChildren().add(rollVBox);

        //分班管理
        MyVBox brvbarVBox = new MyVBox();
        myVBoxInit(brvbarVBox);
        this.getChildren().add(brvbarVBox);
    }

    /**
     * 总控制
     *
     * @param sumHBox 总控容器
     */
    private void sumHBoxInit(HBox sumHBox) {
        CheckBox checkBox = new CheckBox("全部");
        sumHBox.getChildren().add(checkBox);
    }

    /**
     * 分班管理控制
     *
     * @param brvbarVBox 容器
     */
    private void myVBoxInit(MyVBox brvbarVBox) {

        //布局
        brvbarVBox.setSpacing(10);

        MyHBox headHBox = new MyHBox();
        brvbarVBox.getChildren().add(headHBox);
        //布局
        headHBox.setSpacing(10);
        Label enpLab = new Label("分班管理：");
        enpLab.setMinWidth(140);
        enpLab.setAlignment(Pos.CENTER_RIGHT);
        headHBox.getChildren().add(enpLab);
        CheckBox sum = new CheckBox("全部");
        headHBox.getChildren().add(sum);

        MyHBox footHBox = new MyHBox();
        brvbarVBox.getChildren().add(footHBox);
        //布局
        footHBox.setSpacing(10);
        footHBox.setPadding(new Insets(0, 0, 0, 150));
        footHBox.getChildren().addAll(new CheckBox("随机平均分班")
                , new CheckBox("手动分班"), new CheckBox("预览分班")
                , new CheckBox("调整分班"), new CheckBox("确认分班"));
    }

    /**
     * 学习管理控制
     *
     * @param rollVBox 容器
     */
    private void rollVBoxInit(MyVBox rollVBox) {

        rollVBox.setSpacing(10);

        //布局
        rollVBox.setSpacing(10);

        MyHBox headHBox = new MyHBox();
        rollVBox.getChildren().add(headHBox);
        //布局
        headHBox.setSpacing(10);
        Label enpLab = new Label("学籍信息管理：");
        enpLab.setMinWidth(140);
        enpLab.setAlignment(Pos.CENTER_RIGHT);
        headHBox.getChildren().add(enpLab);
        CheckBox sum = new CheckBox("全部");
        headHBox.getChildren().add(sum);

        MyHBox footHBox = new MyHBox();
        rollVBox.getChildren().add(footHBox);
        //布局
        footHBox.setSpacing(10);
        footHBox.setPadding(new Insets(0, 0, 0, 150));
        footHBox.getChildren().addAll(new CheckBox("学员基本信息")
                , new CheckBox("学籍档案信息"), new CheckBox("学籍异动信息")
                , new CheckBox("就业信息"));

    }
}

/**
 * 教学权限
 */
class TeachingPrivilege extends VBox {

    /**
     * 构建教学权限
     */
    public TeachingPrivilege() {
        //布局
        Insets insets = new Insets(5, 10, 5, 10);
        this.setPadding(insets);
        this.setSpacing(10);

        //总控制
        MyHBox sumHBox = new MyHBox();
        sumHBoxInit(sumHBox);
        this.getChildren().add(sumHBox);

        //课程管理
        MyVBox courseVBox = new MyVBox();
        courseVBoxInit(courseVBox);
        this.getChildren().add(courseVBox);

        //教学计划管理
        MyVBox teaPlanVBox = new MyVBox();
        teaPlanVBoxInit(teaPlanVBox);
        this.getChildren().add(teaPlanVBox);

        //教师管理
        MyVBox teacherVBox = new MyVBox();
        teacherVBoxInit(teacherVBox);
        this.getChildren().add(teacherVBox);

        //教学安排
        MyVBox teaArrangeVBox = new MyVBox();
        teaArrangeVBoxInit(teaArrangeVBox);
        this.getChildren().add(teaArrangeVBox);
    }

    /**
     * 总控制
     *
     * @param sumHBox 总控容器
     */
    private void sumHBoxInit(HBox sumHBox) {
        CheckBox checkBox = new CheckBox("全部");
        sumHBox.getChildren().add(checkBox);
    }

    /**
     * 教学安排管理
     *
     * @param teaArrangeVBox 容器
     */
    private void teaArrangeVBoxInit(MyVBox teaArrangeVBox) {

        //布局
        teaArrangeVBox.setSpacing(10);

        MyHBox headHBox = new MyHBox();
        teaArrangeVBox.getChildren().add(headHBox);
        //布局
        headHBox.setSpacing(10);
        Label enpLab = new Label("教学安排：");
        enpLab.setMinWidth(140);
        enpLab.setAlignment(Pos.CENTER_RIGHT);
        headHBox.getChildren().add(enpLab);
        CheckBox sum = new CheckBox("全部");
        headHBox.getChildren().add(sum);

        MyHBox footHBox = new MyHBox();
        teaArrangeVBox.getChildren().add(footHBox);
        //布局
        footHBox.setSpacing(10);
        footHBox.setPadding(new Insets(0, 0, 0, 150));
        footHBox.getChildren().addAll(new CheckBox("新增教学安排")
                , new CheckBox("编辑教学安排"), new CheckBox("删除教学安排")
                , new CheckBox("查看教学安排"), new CheckBox("取消")
                , new CheckBox("确认开课"));
    }

    /**
     * 教师管理控制
     *
     * @param teacherVBox 容器
     */
    private void teacherVBoxInit(MyVBox teacherVBox) {

        //布局
        teacherVBox.setSpacing(10);

        MyHBox headHBox = new MyHBox();
        teacherVBox.getChildren().add(headHBox);
        //布局
        headHBox.setSpacing(10);
        Label enpLab = new Label("教师管理：");
        enpLab.setMinWidth(140);
        enpLab.setAlignment(Pos.CENTER_RIGHT);
        headHBox.getChildren().add(enpLab);
        CheckBox sum = new CheckBox("全部");
        headHBox.getChildren().add(sum);

        MyHBox footHBox = new MyHBox();
        teacherVBox.getChildren().add(footHBox);
        //布局
        footHBox.setSpacing(10);
        footHBox.setPadding(new Insets(0, 0, 0, 150));
        footHBox.getChildren().addAll(new CheckBox("新增教师")
                , new CheckBox("查看教师"), new CheckBox("编辑教师")
                , new CheckBox("暂停"), new CheckBox("启用"));

    }

    /**
     * 教学计划管理
     *
     * @param teaPlanVBox 容器
     */
    private void teaPlanVBoxInit(MyVBox teaPlanVBox) {

        //布局
        teaPlanVBox.setSpacing(10);

        MyHBox headHBox = new MyHBox();
        teaPlanVBox.getChildren().add(headHBox);
        //布局
        headHBox.setSpacing(10);
        Label enpLab = new Label("教学计划管理：");
        enpLab.setMinWidth(140);
        enpLab.setAlignment(Pos.CENTER_RIGHT);
        headHBox.getChildren().add(enpLab);
        CheckBox sum = new CheckBox("全部");
        headHBox.getChildren().add(sum);

        MyHBox footHBox = new MyHBox();
        teaPlanVBox.getChildren().add(footHBox);
        //布局
        footHBox.setSpacing(10);
        footHBox.setPadding(new Insets(0, 0, 0, 150));
        footHBox.getChildren().addAll(new CheckBox("新增教学计划")
                , new CheckBox("查看教学计划"), new CheckBox("删除教学计划")
                , new CheckBox("编辑教学计划"), new CheckBox("新增关联课程")
                , new CheckBox("确认完成"), new CheckBox("启用")
                , new CheckBox("删除"));
    }

    /**
     * 课程管理控制
     *
     * @param courseVBox 容器
     */
    private void courseVBoxInit(MyVBox courseVBox) {

        courseVBox.setSpacing(10);

        //布局
        courseVBox.setSpacing(10);

        MyHBox headHBox = new MyHBox();
        courseVBox.getChildren().add(headHBox);
        //布局
        headHBox.setSpacing(10);
        Label enpLab = new Label("课程管理：");
        enpLab.setMinWidth(140);
        enpLab.setAlignment(Pos.CENTER_RIGHT);
        headHBox.getChildren().add(enpLab);
        CheckBox sum = new CheckBox("全部");
        headHBox.getChildren().add(sum);

        MyHBox footHBox = new MyHBox();
        courseVBox.getChildren().add(footHBox);
        //布局
        footHBox.setSpacing(10);
        footHBox.setPadding(new Insets(0, 0, 0, 150));
        footHBox.getChildren().addAll(new CheckBox("新增课程")
                , new CheckBox("编辑课程"), new CheckBox("查看课程")
                , new CheckBox("删除课程"), new CheckBox("启用")
                , new CheckBox("停用"));

    }
}

/**
 * 系统权限
 */
class SysPrivilege extends VBox {

    /**
     * 构建系统权限
     */
    public SysPrivilege() {
        //布局
        Insets insets = new Insets(5, 10, 5, 10);
        this.setPadding(insets);
        this.setSpacing(10);

        //总控制
        MyHBox sumHBox = new MyHBox();
        sumHBoxInit(sumHBox);
        this.getChildren().add(sumHBox);

        //后台用户管理
        MyVBox userVBox = new MyVBox();
        userVBoxInit(userVBox);
        this.getChildren().add(userVBox);

        //角色权限管理
        MyVBox roleVBox = new MyVBox();
        roleVBoxInit(roleVBox);
        this.getChildren().add(roleVBox);

        //学习中心管理
        MyVBox stuCenterVBox = new MyVBox();
        stuCenterVBoxInit(stuCenterVBox);
        this.getChildren().add(stuCenterVBox);

        //学科/专业管理
        MyVBox majorVBox = new MyVBox();
        majorVBoxInit(majorVBox);
        this.getChildren().add(majorVBox);
    }

    /**
     * 总控制
     *
     * @param sumHBox 总控容器
     */
    private void sumHBoxInit(HBox sumHBox) {
        CheckBox checkBox = new CheckBox("全部");
        sumHBox.getChildren().add(checkBox);
    }

    /**
     * 专业管理控制
     *
     * @param majorVBox 容器
     */
    private void majorVBoxInit(MyVBox majorVBox) {

        //布局
        majorVBox.setSpacing(10);

        MyHBox headHBox = new MyHBox();
        majorVBox.getChildren().add(headHBox);
        //布局
        headHBox.setSpacing(10);
        Label enpLab = new Label("学科/专业管理：");
        enpLab.setMinWidth(140);
        enpLab.setAlignment(Pos.CENTER_RIGHT);
        headHBox.getChildren().add(enpLab);
        CheckBox sum = new CheckBox("全部");
        headHBox.getChildren().add(sum);

        MyHBox footHBox = new MyHBox();
        majorVBox.getChildren().add(footHBox);
        //布局
        footHBox.setSpacing(10);
        footHBox.setPadding(new Insets(0, 0, 0, 150));
        footHBox.getChildren().addAll(new CheckBox("新增专业")
                , new CheckBox("查看专业"), new CheckBox("删除专业")
                , new CheckBox("编辑专业"));
    }

    /**
     * 学习中心管理控制
     *
     * @param stuCenterVBox 容器
     */
    private void stuCenterVBoxInit(MyVBox stuCenterVBox) {

        //布局
        stuCenterVBox.setSpacing(10);

        MyHBox headHBox = new MyHBox();
        stuCenterVBox.getChildren().add(headHBox);
        //布局
        headHBox.setSpacing(10);
        Label enpLab = new Label("学习中心管理：");
        enpLab.setMinWidth(140);
        enpLab.setAlignment(Pos.CENTER_RIGHT);
        headHBox.getChildren().add(enpLab);
        CheckBox sum = new CheckBox("全部");
        headHBox.getChildren().add(sum);

        MyHBox footHBox = new MyHBox();
        stuCenterVBox.getChildren().add(footHBox);
        //布局
        footHBox.setSpacing(10);
        footHBox.setPadding(new Insets(0, 0, 0, 150));
        footHBox.getChildren().addAll(new CheckBox("新增学习中心")
                , new CheckBox("查看学习中心"), new CheckBox("删除学习中心")
                , new CheckBox("编辑学习中心"), new CheckBox("设置专业"));
    }

    /**
     * 角色权限管理
     *
     * @param roleVBox 容器
     */
    private void roleVBoxInit(MyVBox roleVBox) {

        //布局
        roleVBox.setSpacing(10);

        MyHBox headHBox = new MyHBox();
        roleVBox.getChildren().add(headHBox);
        //布局
        headHBox.setSpacing(10);
        Label enpLab = new Label("角色权限管理：");
        enpLab.setMinWidth(140);
        enpLab.setAlignment(Pos.CENTER_RIGHT);
        headHBox.getChildren().add(enpLab);
        CheckBox sum = new CheckBox("全部");
        headHBox.getChildren().add(sum);

        MyHBox footHBox = new MyHBox();
        roleVBox.getChildren().add(footHBox);
        //布局
        footHBox.setSpacing(10);
        footHBox.setPadding(new Insets(0, 0, 0, 150));
        footHBox.getChildren().addAll(new CheckBox("新增角色")
                , new CheckBox("编辑角色"), new CheckBox("删除角色")
                , new CheckBox("添加用户"), new CheckBox("查看用户")
                , new CheckBox("查看权限"), new CheckBox("设置权限"));
    }

    /**
     * 后台用户管理控制
     *
     * @param rollVBox 容器
     */
    private void userVBoxInit(MyVBox rollVBox) {

        rollVBox.setSpacing(10);

        //布局
        rollVBox.setSpacing(10);

        MyHBox headHBox = new MyHBox();
        rollVBox.getChildren().add(headHBox);
        //布局
        headHBox.setSpacing(10);
        Label enpLab = new Label("后台用户管理：");
        enpLab.setMinWidth(140);
        enpLab.setAlignment(Pos.CENTER_RIGHT);
        headHBox.getChildren().add(enpLab);
        CheckBox sum = new CheckBox("全部");
        headHBox.getChildren().add(sum);

        MyHBox footHBox = new MyHBox();
        rollVBox.getChildren().add(footHBox);
        //布局
        footHBox.setSpacing(10);
        footHBox.setPadding(new Insets(0, 0, 0, 150));
        footHBox.getChildren().addAll(new CheckBox("新增后台用户")
                , new CheckBox("查看后台用户"), new CheckBox("删除后台用户")
                , new CheckBox("编辑后台用户"), new CheckBox("启用")
                , new CheckBox("停用"), new CheckBox("重置密码"));

    }
}